MSGRCV
Section: System Calls (2)
Index
Return to Main Contents
BSD mandoc
NetBSD
NAME
msgrcv
- receive a message from a message queue
SYNOPSIS
Fd #include <sys/types.h>
Fd #include <sys/ipc.h>
Fd #include <sys/msg.h>
Ft int
Fn msgrcv int msqid void *msgp size_t msgsz long msgtyp int msgflg
DESCRIPTION
The
Fn msgrcv
function receives a message from the message queue specified in
Fa msqid ,
and places it into the structure pointed to by
Fa msgp .
This structure should consist of the following members:
long mtype; /* message type */
char mtext[1]; /* body of message */
mtype
is an integer greater than 0 that can be used for selecting messages,
mtext
is an array of bytes, with a size up to that of the system limit (MSGMAX).
The value of
Fa msgtyp
has one of the following meanings:
-
Fa msgtyp
is greater than 0. The first message of type
Fa msgtyp
will be received.
-
Fa msgtyp
is equal to 0. The first message on the queue will be received.
-
Fa msgtyp
is less than 0. The first message of the lowest message type that is
less than or equal to the absolute value of
Fa msgtyp
will be received.
Fa msgsz
specifies the maximum length of the requested message. If the received
message has a length greater than
Fa msgsz
it will be silently truncated if the MSG_NOERROR flag is set in
Fa msgflg ,
otherwise an error will be returned.
If no matching message is present on the message queue specified by
Fa msqid ,
the behaviour of
Fn msgrcv
depends on whether the IPC_NOWAIT flag is set in
Fa msgflg
or not. If IPC_NOWAIT is set,
Fn msgrcv
will immediately return a value of -1, and set
errno
to EAGAIN. If IPC_NOWAIT is not set, the calling process will be blocked
until:
-
A message of the requested type becomes available on the message queue.
-
The message queue is removed, in which case -1 will be returned, and
errno
set to EINVAL.
-
A signal is received and caught. -1 is returned, and
errno
set to EINTR.
If a message is successfully received, the data structure associated with
Fa msqid
is updated as follows:
-
msg_cbytes
is decremented by the size of the message.
-
msg_lrpid
is set to the pid of the caller.
-
msg_lrtime
is set to the current time.
-
msg_qnum
is decremented by 1.
RETURN VALUES
Upon successful completion,
Fn msgrcv
returns the number of bytes received into the
mtext
field of the structure pointed to by
Fa msgp .
Otherwise, -1 is returned, and
errno
set to indicate the error.
ERRORS
Fn msgrcv
will fail if:
- Bq Er EINVAL
-
Fa msqid
is not a valid message queue identifier
The message queue was removed while
Fn msgrcv
was waiting for a message of the requested type to become available on it.
Fa msgsz
is less than 0.
- Bq Er E2BIG
-
A matching message was received, but its size was greater than
Fa msgsz
and the MSG_NOERROR flag was not set in
Fa msgflg .
- Bq Er EACCESS
-
The calling process does not have read access to the message queue.
- Bq Er EFAULT
-
Fa msgp
points to an invalid address.
- Bq Er EINTR
-
The system call was interrupted by the delivery of a signal.
- Bq Er EAGAIN
-
There is no message of the requested type available on the message queue,
and IPC_NOWAIT is set in
Fa msgflg .
SEE ALSO
msgsnd(2),
msgctl(2),
msgget(2)
BUGS
NetBSD does not define the EIDRM error value, which should be used in
the case of a removed message queue, nor the ENOMSG value, which
should be used when no suitable message is available and IPC_NOWAIT
is set.
HISTORY
Message queues appeared in the first release of AT&T Unix System V.
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUES
-
- ERRORS
-
- SEE ALSO
-
- BUGS
-
- HISTORY
-
This document was created by
man2html,
using the manual pages.
Time: 16:28:59 GMT, April 18, 2022